<?php
namespace Auth;

/**
 * @brief 签名类
 */
class Sign {
    /**
     * 获取签名
     * 
     * @param array $arr
     * 
     * @return string
     */
    public static function getSign($arr) {
        //去除空值
        $arr = array_filter($arr);
        if (isset($arr['sign'])) {
            unset($arr['sign']);
        }
        //按照键名字典排序(升序)
        ksort($arr);
        //生成url格式的字符串
        $str = self::arrToUrl($arr) . '&key=' . \Yaf_Registry::get('Config')->auth->sign->key;
        return strtoupper(md5($str));
    }

    /**
     * 获取带签名的数组
     * 
     * @param array $arr
     * 
     * @return array
     */
    public static function setSign($arr) {
        $arr['sign'] = self::getSign($arr);
        return $arr;
    }

    /**
     * 数组转URL格式的字符串
     * 
     * @param array $arr
     * 
     * @return string
     */
    public static function arrToUrl($arr) {
        $arr = str_replace(" ","+", $arr);
        return urldecode(http_build_query($arr));
    }
}
